MySQL এ Virtual Columns এমন ধরনের কলাম যা ডেটাবেসের টেবিলে সংরক্ষিত না হয়ে, রানটাইমে গণনা করে তৈরি করা হয়। এগুলি সাধারণত কনভিনিয়েন্সের জন্য ব্যবহৃত হয়, যেখানে আপনি কিছু ক্যালকুলেটেড ডেটা দেখতে চান যা অন্যান্য কলামগুলির মানের উপর ভিত্তি করে তৈরি হয়। Virtual Columns টেবিলের শারীরিক ডেটার অংশ না হলেও, এগুলির মান স্বয়ংক্রিয়ভাবে ক্যালকুলেট হয়ে থাকে যখন কোনো কুয়েরি চালানো হয়।
Virtual Columns এর বৈশিষ্ট্য
- Data is not stored: Virtual Columns ডেটাবেসের টেবিলে সংরক্ষিত হয় না। এগুলি স্বয়ংক্রিয়ভাবে নির্ধারিত হয় নির্দিষ্ট গণনার ভিত্তিতে।
- Read-only: Virtual Columns সাধারণত read-only হয়, অর্থাৎ আপনি এদের মান পরিবর্তন করতে পারবেন না। এটি কেবল অন্য কলামগুলির মানের উপর নির্ভর করে গণনা করা হয়।
- Automatically calculated: একটি Virtual Column টেবিলের অন্যান্য কলামের উপর ভিত্তি করে গণনা করা হয়, এবং এটি কেবল তখনই আপডেট হয় যখন নির্ভরশীল কলামের মান পরিবর্তিত হয়।
Virtual Column তৈরি করা
MySQL এ Virtual Column তৈরি করার জন্য, GENERATED ALWAYS এবং VIRTUAL কীওয়ার্ড ব্যবহার করা হয়। একটি ভার্চুয়াল কলাম তৈরি করতে, আপনাকে প্রথমে কলামের নাম, ডেটা টাইপ, এবং গণনা করার জন্য একটি অভিব্যক্তি (expression) নির্ধারণ করতে হবে।
সিনট্যাক্স:
CREATE TABLE table_name (
column_name datatype GENERATED ALWAYS AS (expression) VIRTUAL
);
এখানে:
column_name: ভার্চুয়াল কলামের নাম।datatype: কলামের ডেটা টাইপ (যেমনINT,VARCHAR,DATE, ইত্যাদি)।expression: গণনা করার জন্য কলামগুলির মধ্যে একটি বা একাধিক কলামের ভিত্তিতে একটি অভিব্যক্তি।
Virtual Column উদাহরণ
ধরা যাক, একটি products নামের টেবিল আছে যেখানে price এবং tax_rate কলাম রয়েছে এবং আপনি একটি ভার্চুয়াল কলাম তৈরি করতে চান যা total_price হিসাব করবে (যেখানে total_price হল price এবং tax_rate এর ভিত্তিতে গুণফল)।
1. টেবিল তৈরি করা Virtual Column সহ:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255),
price DECIMAL(10, 2),
tax_rate DECIMAL(5, 2),
total_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * (1 + tax_rate / 100)) VIRTUAL
);
এখানে:
total_priceহল একটি ভার্চুয়াল কলাম, যাpriceএবংtax_rateকলামের মানের ভিত্তিতে গণনা করা হয়।price * (1 + tax_rate / 100)হল গণনার অভিব্যক্তি, যাtotal_priceনির্ধারণ করে।
2. ডেটা ইনসার্ট করা:
INSERT INTO products (product_id, product_name, price, tax_rate)
VALUES (1, 'Product A', 100.00, 10.00);
3. ভার্চুয়াল কলাম ব্যবহার করে কুয়েরি চালানো:
SELECT product_name, total_price FROM products;
এটি products টেবিলের product_name এবং তার সংশ্লিষ্ট total_price প্রদর্শন করবে, যেখানে total_price price এবং tax_rate এর ভিত্তিতে ক্যালকুলেট করা হবে।
Persistent Virtual Columns (Stored Columns)
MySQL এ Persistent Virtual Columns নামে একটি বৈশিষ্ট্যও আছে, যেখানে ভার্চুয়াল কলামটি অবশ্যই গণনা করা হবে এবং টেবিলের মধ্যে সংরক্ষিত হবে, তবে এটি সাধারণ Virtual Column এর মতো পরিবর্তনশীল।
Persistent Virtual Column তৈরি করা:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255),
price DECIMAL(10, 2),
tax_rate DECIMAL(5, 2),
total_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * (1 + tax_rate / 100)) STORED
);
এখানে, total_price কলামটি একটি Persistent ভার্চুয়াল কলাম হবে, অর্থাৎ এটি টেবিলের মধ্যে সংরক্ষিত হবে এবং Stored ডেটা হিসেবে গণনা হবে।
প্রধান পার্থক্য:
- Virtual Columns: টেবিলের মধ্যে সংরক্ষিত হয় না এবং কেবল কুয়েরি চলাকালীন সময়ে গণনা করা হয়।
- Stored Columns: গণনা করার পর টেবিলের মধ্যে সংরক্ষিত হয় এবং ডেটার একটি অংশ হয়ে থাকে।
Virtual Columns এর সুবিধা
- অতিরিক্ত ডেটা সংরক্ষণ ছাড়াই গণনা করা: ভার্চুয়াল কলাম শুধুমাত্র রানটাইমে গণনা করা হয়, তাই এটি অতিরিক্ত স্টোরেজ ব্যবহার করে না।
- স্বয়ংক্রিয় আপডেট: ভার্চুয়াল কলামটি সংরক্ষিত ডেটার ভিত্তিতে স্বয়ংক্রিয়ভাবে আপডেট হয়, তাই আপনার যেকোনো পরিবর্তন স্বয়ংক্রিয়ভাবে গণনা ফলাফলটি পরিবর্তন করবে।
- ক্যালকুলেটেড ডেটা সহজে পাওয়া যায়: আপনি যদি বিভিন্ন কলামের ওপর ভিত্তি করে কোনো ডেটা দেখতে চান, তাহলে ভার্চুয়াল কলাম এটি সরাসরি কুয়েরি করে নিতে সহায়তা করে।
- পারফরম্যান্স বৃদ্ধি: ভার্চুয়াল কলাম ব্যবহার করে ডেটা ক্যালকুলেশন এবং স্টোরেজ সহজ এবং দ্রুত করা যায়।
Virtual Columns এর সীমাবদ্ধতা
- ডেটাবেসের স্টোরেজে ভার্চুয়াল কলাম থাকে না: যদি আপনি ডেটার ইতিহাস বা ক্যালকুলেশন সংরক্ষণ করতে চান, তবে ভার্চুয়াল কলাম সম্ভবত উপযুক্ত নয়, কারণ এটি রানটাইমে ক্যালকুলেট হয় এবং সংরক্ষণ করা হয় না।
- Complex Expressions: কিছু জটিল অভিব্যক্তি ভার্চুয়াল কলামে ব্যবহৃত হতে পারে না, বিশেষত যদি এটি আরও জটিল এবং অনেক টেবিলের সাথে যুক্ত হয়।
সারাংশ
MySQL এর Virtual Columns একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ক্যালকুলেটেড ডেটা ব্যবহার করে আপনার টেবিলের কাঠামো সহজ করতে সহায়তা করে। এটি রানটাইমে গণনা করা হয় এবং টেবিলের মধ্যে সংরক্ষিত হয় না, ফলে অতিরিক্ত স্টোরেজের প্রয়োজন পড়ে না। তবে কিছু ক্ষেত্রে Persistent Virtual Columns (Stored Columns) ব্যবহার করা যেতে পারে, যেখানে ক্যালকুলেটেড ডেটা সংরক্ষণ করা হয়। ভার্চুয়াল কলামগুলি সঠিকভাবে ব্যবহার করলে পারফরম্যান্স উন্নত এবং ডেটা ম্যানেজমেন্ট সহজ হতে পারে।
Read more